home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus Special 16
/
AMIGAplus Sonderheft 16 (1998)(ICP)(DE)[!].iso
/
pd
/
anwendungen
/
xpk_source
/
xpkmaster
/
fault.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-08-27
|
2KB
|
85 lines
#ifndef XPKMASTER_FAULT_C
#define XPKMASTER_FAULT_C
/* Routinesheader
Name: fault.c
Main: xpkmaster
Versionstring: $VER: fault.c 1.7 (09.05.1998)
Author: SDI
Distribution: Freeware
Description: Error message generators
1.0 05.10.96 : first real version
1.1 27.12.96 : added parts of Fault functions
1.2 28.12.96 : finished the two Fault functions
1.3 31.03.97 : added new error (XPKERR_UNKNOWN);
1.4 02.04.97 : renamed to fault.c, removed geterror
1.5 21.02.98 : uses new style register definition
1.6 26.03.98 : some optimizations and a bug fix
1.7 09.05.98 : bug fix
*/
#include <proto/exec.h>
#include <proto/dos.h>
#include "xpkmaster.h"
#include "texts.h"
ASM(BOOL) LIBXpkPrintFault(REG(d0, LONG code), REG(a0, STRPTR header))
{
STRPTR a[2], fmt = "%s: %s\n";
if(code > 0 || code < MINERROR)
code = XPKERR_UNKNOWN;
a[1] = XpkErrs[-code];
if(!(a[code = 0] = header))
{
++code; fmt += 4;
}
if(VPrintf(fmt, &a[code]) == -1)
return 0; /* error */
else
return -1; /* ok */
}
ASM(ULONG) LIBXpkFault(REG(d0, LONG code), REG(a0, STRPTR header),
REG(a1, STRPTR buffer), REG(d1, ULONG size))
{
ULONG ssize = 0;
if(size > 1 && buffer)
{
STRPTR string;
if(code > 0 || code < MINERROR)
code = XPKERR_UNKNOWN;
string = XpkErrs[-code];
if((ssize = strlen(string)) > --size) /* remove 1 for 0-byte from size */
ssize = size;
size -= ssize;
if(header && (code = strlen(header)) + 2 <= size)
{
CopyMem(header, buffer, code);
buffer[code++] = ':';
buffer[code++] = ' ';
buffer += code;
}
else
code = 0;
CopyMem(string, buffer, ssize);
buffer[ssize] = 0;
ssize += code;
}
return ssize;
}
#endif /* XPKMASTER_FAULT_C */